Vector¶

Vector is base class of other vector like classes. It represents a series of vectors.

InĀ [1]:
from py3d import Vector
Vector()
Out[1]:
Vector([], dtype=float64)
InĀ [3]:
Vector([0, 0, 0, 0])
Out[3]:
Vector([0, 0, 0, 0])
InĀ [5]:
Vector([1, 2, -4])
Out[5]:
Vector([ 1,  2, -4])
InĀ [7]:
Vector([1, 2, 3]).tile(2)
Out[7]:
Vector([[1, 2, 3],
        [1, 2, 3]])
InĀ [9]:
import py3d
py3d.Vector([1, 2, 0, 3])
Out[9]:
Vector([1, 2, 0, 3])
InĀ [10]:
Vector([1]).tile(2)
Out[10]:
Vector([[1],
        [1]])

Get unit vector

InĀ [12]:
import py3d
V32 = py3d.Vector([
    [1, 3],
    [2, -9],
    [0.1, -3]])
V32.U
Out[12]:
Vector([[ 0.31622777,  0.9486833 ],
        [ 0.21693046, -0.97618706],
        [ 0.03331483, -0.99944491]])

Get length of vectors

InĀ [13]:
V32.L
Out[13]:
array([3.16227766, 9.21954446, 3.0016662 ])
InĀ [15]:
from numpy import allclose
assert allclose(V32.U.L, [[1], [1], [1]])

Get homogeneous vector

InĀ [16]:
V32.H
Out[16]:
Vector3([[ 1. ,  3. ,  1. ],
         [ 2. , -9. ,  1. ],
         [ 0.1, -3. ,  1. ]])

Get a series of random vectors

InĀ [18]:
import py3d
py3d.Vector.rand(2, 3, 4)
Out[18]:
Vector([[[0.34421239, 0.14190631, 0.29925813, 0.89170674],
         [0.72630321, 0.65272486, 0.50218298, 0.57683422],
         [0.15239338, 0.42955835, 0.39420809, 0.73454073]],

        [[0.2631963 , 0.3534369 , 0.01029457, 0.59862867],
         [0.12916797, 0.1945638 , 0.98026875, 0.79953147],
         [0.28395129, 0.23186775, 0.25290963, 0.67202812]]])
InĀ [20]:
import py3d
py3d.Vector([[0, 0], [1, 2], [3, 4]]).diff()
Out[20]:
Vector([[1, 2],
        [2, 2]])

Fill nan elements of a Vector

InĀ [22]:
import py3d
py3d.Vector([0, 1, float("nan")]).fillna(-1)
Out[22]:
Vector([ 0.,  1., -1.])

Drop duplicates

InĀ [23]:
import py3d
py3d.Vector([
    [1,2,1],
    [2,3,4],
    [1,2,1],
    [5,3,4]
]).unique()
Out[23]:
array([[1, 2, 1],
       [2, 3, 4],
       [5, 3, 4]])

Write csv file

InĀ [24]:
import py3d
py3d.Vector([[1,2,3],[4,5,6]]).to_csv("tmp.csv")

Read csv file

InĀ [25]:
import py3d
py3d.read_csv("tmp.csv")
Out[25]:
Vector([[1., 2., 3.],
        [4., 5., 6.]])

Read pcd file

InĀ [26]:
import py3d

py3d.read_pcd("ascii.pcd").xyz.as_point()
Out[26]:
InĀ [27]:
import py3d
pcd = py3d.read_pcd("binary.pcd")
print("min", pcd.min())
print("max", pcd.max())
pcd.xyz.as_point().paint(py3d.Color.map(pcd.z))
min [-1.09082863e+02 -4.56674919e+01 -4.33038330e+00  2.50000000e+01  1.22393358e+09]
max [9.74602280e+01 8.35153122e+01 4.22846746e+00 2.55000000e+02 1.22393358e+09]
Out[27]:

Write npy file

InĀ [28]:
import py3d
py3d.Vector([1,2,3]).to_npy("tmp.npy")

Read npy file

InĀ [29]:
import py3d
py3d.read_npy("tmp.npy")
Out[29]:
Vector([1, 2, 3])

Read a real lidar point cloud from a npy file

InĀ [30]:
import py3d
py3d.read_npy("lidar.npy").xyz.as_point()
Out[30]:

Read a depth map from a npy file

InĀ [31]:
import py3d
py3d.read_npy("depth.npy").z.as_image(sample_rate=1)
Out[31]:

Read ply file

InĀ [32]:
import py3d
vertices, mesh = py3d.read_ply("cube.ply")
print(vertices)
mesh
[[0. 0. 0.]
 [0. 0. 1.]
 [0. 1. 1.]
 [0. 1. 0.]
 [1. 0. 0.]
 [1. 0. 1.]
 [1. 1. 1.]
 [1. 1. 0.]]
Out[32]: